var fs = require('fs')

// promise容器  容器中存放了一个异步任务
// promise本身不是异步，但是内部往往都是封装了一个异步任务

// console.log(1)

// new Promise(function () {
//     console.log(2)
//     fs.readFile('./data/a.txt', 'utf8', function (err, data) {
//         if (err) {
//             console.log(err)
//         } else {
//             console.log(data)
//             console.log(3)
//         }
//     })
// })

// console.log(4)

// 打印顺序  1 2 4 3 aaa


var p1 = new Promise(function (resovle, reject) {
    fs.readFile('./data/a.txt', 'utf8', function (err, data) {
        if (err) {
            reject(err) // 调用reject就相当于调用了then方法的第二个参数函数
        } else {
            resovle(data) // 这里调用的resolve方法实际上就是p1.then方法传递的那个function
        }
    })
})

var p2 = new Promise(function (resovle, reject) {
    fs.readFile('./data/b.txt', 'utf8', function (err, data) {
        if (err) {
            reject(err) // 调用reject就相当于调用了then方法的第二个参数函数
        } else {
            resovle(data) // 这里调用的resolve方法实际上就是p1.then方法传递的那个function
        }
    })
})

var p3 = new Promise(function (resovle, reject) {
    fs.readFile('./data/c.txt', 'utf8', function (err, data) {
        if (err) {
            reject(err) // 调用reject就相当于调用了then方法的第二个参数函数
        } else {
            resovle(data) // 这里调用的resolve方法实际上就是p1.then方法传递的那个function
        }
    })
})

// 当p1成功了，然后then做指定的操作
// then方法接收的function就是容器中的resolve函数
p1.then(function (data) {
    console.log(data)
    // 当前函数中的return的结果就可以在后面的then中function接收到，比如说return 123 那么后面的.then接收到到的结果就是123。没有return,后面收到的就是undefind
    // 真正有用的是，我们可以return一个promise对象
    // 当return一个promise对象的时候，后续的then中的方法的第一个参数会作为p2的resolve
    // return 123 
    return p2
}, function (err) {
    console.log('读取文件失败了', err)
}).then(function (data) {
    console.log(data)
    return p3
}).then(function(data){  
    console.log(data)
})


